#include<bits/stdc++.h>
using namespace std;
#define int long long
struct area
{
	int l,r;
};
int n;
vector<area> V;
bool cmp(area x,area y)
{
//	if(x.l<y.l)return 1;
//	else if(x.l==y.l)return x.r>=y.r;
//	else return 0;
//	if(x.r<y.r&&x.l>y.l)return 0;
	if(x.r!=y.r)return x.r<y.r;
	else return x.l<y.l;
}
bool judge(int x)
{
	vector<area> v(V);
	int p=0;
	while(1)
	{
		bool f=0;
		for(int i=1;i<=v.size()-1;i++)
		{
			int d=v[i].l-p;
			if(p>=20000)return 1;
			if(d>x)
			{
//			return 0;
				continue;
			}
			if(abs(d)>x)
			{
//			if(d>0)p=v[i].r-x;
//			else p=v[i].r+x;
				p=max(v[i].r+x,p);
			}
			else p=max(v[i].r-d,p);
			v.erase(v.begin()+i);//删除
			i--;//删除后i要退1
			f=1;
			break;
		}	
		if(f==0||v.size()==1)break;
	}
	
	if(p>=20000)return 1;
	return 0;
}
signed main()
{
	int t=1;
//	cin>>t
	while(t--)
	{
		cin>>n;
		V=vector<area> (n+1);
		for(int i=1;i<=n;i++)
		{
			cin>>V[i].l>>V[i].r;
			V[i].l*=2;
			V[i].r*=2;
		}
		sort(V.begin()+1,V.end(),cmp);
//		for(int i=1;i<=n;i++)
//		{
//			cout<<v[i].l<<v[i].r<<endl;
////			v[i].l*=2;
////			v[i].r*=2;
//		}
		int l=0,r=20001;
		while(l<r)
		{
			int mid=(r-l)/2+l;
			if(judge(mid))r=mid;
			else l=mid+1;
		}
//		if(l-signed(l)<0.05)
//		{
//			cout<<signed(l)<<endl;
//		}
//		else printf("%0.1lf",l);
		cout<<l/2.0;
	}
	return 0;
}
